package com.wisely.ch9_3_4;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.core.JmsTemplate;

/**
 * 异步消息是用于应用程序之间通信的。
 * 消息则是异步发送的，客户端不需要等待服务处理消息，甚至不需要等待消息投递完成。客户端发送消息，然后继续执行，这是因为客户端假定服务最终可以收到并处理这条消息。
 * 在异步消息中有两个主要的概念：消息代理（message broker）和目的地（destination）。
 * 1、评估异步消息的优点：
 * 1.1、无需等待
 * 1.2、面向消息和解耦
 * 1.3、位置独立
 * 1.4、确保投递
 *
 * JMS是一个Java标准，定义使用消息代理的通用API。
 * JMS是基于JVM消息代理的规范。而ActiveMQ是一个JMS消息代理的实现。
 * AMQP（Advanced Message Queuing Protocol）也是一个消息代理的规范，但它不仅兼容JMS，还支持跨语言和跨平台。AMQP主要实现有RabbitMQ。
 * 2、CommandLineRunner接口，用于程序启动后执行的代码，通过重写其run方法执行。
 *
 */
@SpringBootApplication
public class Ch934Application implements CommandLineRunner { //1

	@Autowired
	JmsTemplate jmsTemplate; //2

	public static void main(String[] args) {
		SpringApplication.run(Ch934Application.class, args);

	}

	@Override
	public void run(String... args) throws Exception {
		//3
		jmsTemplate.send("my-destination", new Msg());

	}
}
